<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 用来将平铺的数组转树状结构
    arr = [
      { 'id': '29', 'pid': '',     'name': '总裁办' },
      { 'id': '2c', 'pid': '',     'name': '财务部' },
      { 'id': '2d', 'pid': '2c',   'name': '财务核算部'},
      { 'id': '2f', 'pid': '2c',   'name': '薪资管理部'},
      { 'id': 'd2', 'pid': '',     'name': '技术部'},
      { 'id': 'd3', 'pid': 'd2',   'name': 'Java研发部'}
    ]
    输入 arr 输出tree
    递归
    1. 定义函数，它能从指定的数组中找指定pid的children
        arr2tree(arr, '') ==> [
          { 'id': '29', 'pid': '','name': '总裁办'},
          { 'id': '2c', 'pid': '','name': '财务部' },
          { 'id': 'd2', 'pid': '','name': '技术部'}
        ]
    // 2. 对结果中的每一个元素，继续找chilren： pid 是当前元素的id。例如 '2c'
         arr2tree(arr,'2c') ===> [
          { 'id': '2d', 'pid': '2c', 'name': '财务核算部'},
          { 'id': '2f', 'pid': '2c', 'name': '薪资管理部'},
         ]
    
    tree = [
      { 'id': '29', 'pid': '',     'name': '总裁办' },
      { 'id': '2c', 'pid': '',     'name': '财务部', children: [
          { 'id': '2d', 'pid': '2c',   'name': '财务核算部'},
          { 'id': '2f', 'pid': '2c',   'name': '薪资管理部'}]
      },
      { 'id': 'd2', 'pid': '',     'name': '技术部', children: [
        { 'id': 'd3', 'pid': 'd2',   'name': 'Java研发部'}]
      }
    ] */

        // 在arr数组中 找出pid为第二个参数的元素
        function arr2tree(arr, pid) {
            const tree = arr.filter(item => item.pid === pid)

            tree.forEach(item => {
                item.children = arr2tree(arr, item.id)
            })
            return tree
        }

        const arr = [
            { 'id': '29', 'pid': '', 'name': '总裁办' },
            { 'id': '2c', 'pid': '', 'name': '财务部' },
            { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
            { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
            { 'id': 'd2', 'pid': '', 'name': '技术部' },
            { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }
        ]
        console.log(arr2tree(arr, ''))
    </script>
</body>

</html>